package tec;

public class Autobus {
    
    
    private JaugeNaturel nbAssis;
    private JaugeNaturel nbDebout;
    private int arret;
    private int nbPassagers;
    private PassagerStandard[] passagers;
	
    public Autobus(int nbPlaceAssise, int nbPlaceDebout) {
	passagers = new PassagerStandard[nbPlaceAssise + nbPlaceDebout];
	nbAssis =  new JaugeNaturel(0,nbPlaceAssise,0);
	nbDebout = new JaugeNaturel(0,nbPlaceDebout,0);
	passagers = new PassagerStandard[nbPlaceAssise + nbPlaceDebout];
	arret = 0;
	nbPassagers = 0;
    }
    

  public boolean aPlaceAssise() {
      
      return !(nbAssis.estRouge());
  }

  public boolean aPlaceDebout() {
      return !(nbDebout.estRouge());
  }

  public void demanderPlaceAssise(PassagerStandard p) {
      nbAssis.incrementer();
      p.accepterPlaceAssise();
      passagers[nbPassagers] = p;
      nbPassagers ++;
  }

  public void demanderPlaceDebout(PassagerStandard p) {
      nbDebout.incrementer();
      p.accepterPlaceDebout();
      passagers[nbPassagers] = p;
      nbPassagers ++;
  }

  public void demanderSortie(PassagerStandard p) {
      if(p.estAssis()){
	  nbAssis.decrementer();
	  p.accepterSortie();
      }
      else{
	  if(p.estDebout()){
	      nbDebout.decrementer();
	      p.accepterSortie();
	  }
      }
  }
    
    //les parametres sont consideres valides
    public void demanderChangerEnDebout(PassagerStandard p) {
	nbAssis.decrementer();
	nbDebout.incrementer();
	p.accepterPlaceDebout();
    }
    
    public void demanderChangerEnAssis(PassagerStandard p) {
	nbAssis.incrementer();
	nbDebout.decrementer();
	p.accepterPlaceAssise();
	
    }
    //A revoir le parcours du tableau
    public void allerArretSuivant() { 
	arret++;
	for(int i=0; i < nbPassagers; i++){
	    if(!passagers[i].estDehors())
		passagers[i].nouvelArret(this, arret);
	    
	}
    }
    @Override
    public String toString() {
	
	return "[arret:" + arret + ", assis:" + nbAssis.toString() + ", debout:" + nbDebout.toString() + "]";
    }
 

}
